//
//  WBStatusListViewModel.swift
//  传智微博
//
//  Created by Pro on 2017/8/15.
//  Copyright © 2017年 liuyanwei. All rights reserved.
//

import Foundation

//微博数据列表视图模型
//如果类需要使用 ‘kvc’ 或者字典转模型框架设置对象，类需要继承 NSObject
//如果类只是包装了一些代码逻辑，可以不用任何父类，好处是更加轻量级
//如果用oc ,一律都继承 NSObject 即可

//上拉刷新最大尝试次数
private let maxPullupTryTimes = 3
//负责微博的数据处理
class WBStatusListViewModel {
    
    lazy var statusList = [WBStatus]()
    //上拉刷新错误次数
    private var pullupErrorTimes = 0

    //加载微博列表
    func loadStatus(pullup:Bool, completion:@escaping (_ isSuccess:Bool, _ shouldRefresh:Bool)->()) {

        //检查是否上拉刷新,同时检查刷新错误
        if pullup && pullupErrorTimes > maxPullupTryTimes {
            completion(false,false)
            return
        }

        //since_id 取出数组中的第一条微博的id
        let since_id = pullup ? 0 : (statusList.first?.id ?? 0)
        //上拉刷新，取出数组的最后一条微博的id
        let max_id = !pullup ? 0 : (statusList.last?.id ?? 0)

        print("准备刷新，最后一条\(statusList.last?.text ?? "")")
        WBNetworkManager.shared.statusList(since_id: since_id, max_id: max_id) { (list, isSuccess) in
            //1.字典转模型
            guard let array = NSArray.yy_modelArray(with: WBStatus.self, json: list ?? []) as? [WBStatus] else {
                completion(isSuccess,false)
                return
            }
            print("刷新了 - \(array.count)")
            // 2.FIXME: 拼接数据

            if pullup {
                //上拉刷新，将结果数据拼接在数组后面
                self.statusList += array
                print("上拉刷新")
            }else {
                //下拉刷新，将结果数据拼接在数组前面
                self.statusList = array + self.statusList
            }
            //判断上拉刷新的次数
            if pullup  && array.count == 0 {
                self.pullupErrorTimes += 1
                //3.完成回调
                completion(isSuccess,false)
            }else {
                //3.完成回调
                completion(isSuccess,true)
            }
        }
    }
}
















